import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.MulticastSocket;
import java.net.UnknownHostException;
import java.util.LinkedList;

/**
 * Thread qui recoit les ordres du serveur
 * pour lancer le jeu, le mettre en pause ou le remettre a zero
 * @author anane & morchid & laaqoud
 *	Version 1.0
 */

public class ReceptionOrdre extends Thread {
	
	private MulticastSocket s;
	private InetAddress gr;
	private int monNumero,taille;
	private DatagramSocket ms;
	private InetAddress groupe;	
	private ReceptionPosition rp;
	private Agent a;
	
	public ReceptionOrdre(int i,int t) throws IOException{
		gr = InetAddress.getByName("224.0.0.1");
		s = new MulticastSocket(3000);
		s.joinGroup(gr);
		monNumero = i;
		groupe = InetAddress.getByName("224.0.0.2");
		ms = new MulticastSocket(4000);
		taille = t;
	}
	
	/**
	 * Permet de notifier les autres joueurs
	 * S'active seulement pour l'agent numero 1
	 */
	public void notifierJoueur() {
		byte[] buffer = new byte[1024];
		try {
			System.out.println("je communique ma position");
			String msg = "<"+monNumero+","+Agent.getPosition().getX()+","+Agent.getPosition().getY()+">";
			buffer = msg.getBytes();
			DatagramPacket p = new DatagramPacket(buffer,buffer.length,groupe,4000);
			ms.send(p);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public void run(){
			while(true){
				try {	
					byte[] message = new byte[1024];
					DatagramPacket p = new DatagramPacket(message, message.length);
					s.receive(p);
					String ch = new String(p.getData());
					
					if (ch.trim().equals(Integer.toString(monNumero))) {
						notifierJoueur();
					}
					
					if (ch.trim().equals("STOP")){
						ReceptionPosition.interrompre();
					}
					
					if (ch.trim().equals("RA")){
						System.out.println("remise a zero");
						a= new Agent(monNumero,taille);
						a.jouer();
						break;
					}
					
				} catch (UnknownHostException e) {
					e.printStackTrace();
				} catch (IOException e) {
					e.printStackTrace();
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}		
	}

}
